package br.com.decorando.activity;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ListView;
import br.com.decorando.dao.PerfilDao;
import br.com.decorando.model.Perfil;
import br.comdecorando.adapter.PerfilAdapter;
import br.comdecorando.adapter.PerfilAdapter.PerfilHolder;




public class PerfilActivity extends Activity {
	private PerfilAdapter adapter;
	private PerfilDao perfilDao = new PerfilDao(this);
	private List<Perfil> perfis = new ArrayList<Perfil>();	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_perfil);
		atualizarLista();	
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.perfil, menu);
		return true;
	}
	
	public Perfil getEditPerfil(){
		if(adapter.isEdit())
			return adapter.getEditPerfil();
		return new Perfil();
	}
	
	public void cadastrar(View view){		
		EditText edtNome = (EditText) findViewById(R.id.edtNome);		
		Perfil perfil = new Perfil();		
		perfil.setName(edtNome.getText().toString());		
		if(perfil.getName().equals("")){
			exibirMensagem(getResourceString(R.string.error_invalido), 
					getResourceString(R.string.error_perfil_vazio));			
		}else if(perfis.contains(perfil) && (!adapter.isEdit() || !adapter.getEditPerfil().equals(perfil.getName()))){
			exibirMensagem(getResourceString(R.string.error_invalido), 
					getResourceString(R.string.error_perfil_duplicado));
		}else{						
			if(!adapter.isEdit()){					
				perfilDao.save(perfil);
				setupEditNome("");																
				atualizarLista();
			}else{
				alterarDialog(perfil);							
			}
			
		}
	}	
	
	public void alterarDialog(Perfil perfil){
		final String nome = perfil.getName();
		String message = getResourceString(R.string.editar_perfil, adapter.getEditPerfil().getName(), nome);
		new AlertDialog.Builder(this)
        .setMessage(message)
        .setCancelable(false)
        .setPositiveButton(getResourceString(R.string.yes), 
        	new DialogInterface.OnClickListener() {
             public void onClick(DialogInterface dialog, int id) {
                  alterarPerfil(nome);
             }
         })
        .setNegativeButton(getResourceString(R.string.no), null)
        .show();
	}
	
	public void alterarPerfil(String nome){
		adapter.getEditPerfil().setName(nome);
		perfilDao.update(adapter.getEditPerfil());		
		endEdit();		
		atualizarLista();		
	}
	
	public void ativar(View view){
		final Perfil perfil = ((PerfilHolder) view.getTag()).getPerfil();
		perfil.setAtivo(true);			
		perfilDao.update(perfil);
		atualizarLista();
	}
	
	public void desativarDialog(View view){
		final Perfil perfil = ((PerfilHolder) view.getTag()).getPerfil();
		new AlertDialog.Builder(this)
        .setMessage(getResourceString(R.string.excluir_perfil, perfil.getName()))
        .setCancelable(false)
        .setPositiveButton(getResourceString(R.string.yes), 
        new DialogInterface.OnClickListener() {
             public void onClick(DialogInterface dialog, int id) {
                  desativarPerfil(perfil);
             }
         })
        .setNegativeButton(getResourceString(R.string.no), null)
        .show();		
	}
	
	public void desativarPerfil(Perfil perfil){
		perfil.setAtivo(false);			
		perfilDao.update(perfil);
		atualizarLista();
	}
	
	public void editarPerfil(View view){
		endEdit();
		PerfilHolder holder = (PerfilHolder) view.getTag();		
		setupButton(R.drawable.ic_action_edit);
		setupEditNome(holder.getNome());
		adapter.setEditHolder(holder);
	}
	
	public void cancelar(View view){									
		endEdit();
	}
	
	public void atualizarLista(){
		ListView listView = (ListView) findViewById(R.id.listPerfis);
		perfis = perfilDao.list();
		adapter = new PerfilAdapter(this, R.layout.list_perfil, perfis);		
		listView.setAdapter(adapter);		
	}		
	
	public void endEdit(){		
		setupButton(R.drawable.ic_action_new);
		setupEditNome("");			
		adapter.setEditHolder(null);					
	}
	
	public void setupButton(int image){
		ImageButton button = (ImageButton) findViewById(R.id.btnCadastrar);
		button.setBackgroundResource(image);
	}
			
	public void setupEditNome(String nome){
		EditText edtNome = (EditText) findViewById(R.id.edtNome);
		edtNome.setText(nome);
	}
	
	public void exibirMensagem(String title, String message){
		AlertDialog.Builder alert = new AlertDialog.Builder(this);
		alert.setTitle(title);
		alert.setMessage(message);
		alert.setPositiveButton("OK", null);
		alert.show();
	}
	
	public String getResourceString(int string, Object... args){
		return getResources().getString(string, args); 
	}	
	
	public Drawable getResourceImage(int image){
		return getResources().getDrawable(image); 
	}	
	
    @Override
	public boolean onOptionsItemSelected(MenuItem item) {
    	Intent intent;
    	switch (item.getItemId()) {
			case R.id.menu_perfil:
				intent = new Intent(this, PerfilActivity.class);
				startActivity(intent);
				return true;
			default:
				return super.onOptionsItemSelected(item);
		}
    }
}
